home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_02_04 / 2n04053a < prev    next >
Text File  |  1991-02-23  |  2KB  |  76 lines

  1.  
  2. /*
  3.  * PROGRAM     :  BRAND.C
  4.  * AUTHOR      :  Mark R. Nelson
  5.  * DATE        :  January 13, 1990
  6.  * DESCRIPTION :  This program "brands" the unused bytes 
  7.  *       of CMOS RAM with the string specified on the 
  8.  *       command line.  The string is padded out to the 
  9.  *       correct length, 12 bytes.
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <dos.h>
  16. #include <conio.h>
  17.  
  18. #ifdef M_I86                /* Microsoft C functions */
  19. #define enable            _enable
  20. #define disable           _disable
  21. #define inportb( a )      inp( a )
  22. #define outportb( a, b )  outp( a, b )
  23. #endif
  24.  
  25. unsigned char read_cmos( int location );
  26. void write_cmos( int location, unsigned char value );
  27. void error_exit( void );
  28.  
  29. int main( int argc, char *argv[] )
  30. {
  31.     int i;
  32.     char buffer[ 25 ];
  33.  
  34.     if ( argc < 2 )
  35.         error_exit();
  36.     if ( strlen( argv[ 1 ] ) > 12 )
  37.         error_exit();
  38.     printf( "Branding string: %s\n", argv[ 1 ] );
  39.     strcpy( buffer, argv[ 1 ] );
  40.     strcat( buffer, "            " );
  41.     for ( i = 0 ; i < 12 ; i++ )
  42.         write_cmos( 0x34 + i, buffer[ i ] );
  43.     return( 0 );
  44. }
  45.  
  46. unsigned char read_cmos( int location )
  47. {
  48.     outportb( 0x70, location );
  49.     return( (unsigned char) inportb( 0x71 ) );
  50. }
  51.  
  52. void write_cmos( int loc, unsigned char value )
  53. {
  54.     int checksum;
  55.  
  56.     outportb( 0x70, loc );
  57.     outportb( 0x71, value );
  58.     if ( loc > 0xf && loc < 0x2e ) {
  59.         checksum = 0;
  60.         for ( loc = 0x10 ; loc <= 0x2d ; loc++ )
  61.             checksum += read_cmos( loc );
  62.         write_cmos( 0x2e, (char) ( checksum >> 8 ) );
  63.         write_cmos( 0x2f, (char) ( checksum & 255 ) );
  64.     }
  65. }
  66.  
  67. void error_exit()
  68. {
  69.     puts( "\nUsage:  BRAND string" );
  70.     puts( "\n\"string\" must be less than 12 bytes. " );
  71.     puts( "The string parameter will be padded out, " );
  72.     puts( "and written into locations 0x34 through 0x3f " );
  73.     puts( "of CMOS RAM." );
  74. }
  75.  
  76.